iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0
佛心分享-SideProject30

營養師想做一個飲食建議產品系列 第 19 篇

Day19 - Hallucination:為什麼不能完全相信 AI ?

  • 分享至 

  • xImage
  •  

上一篇 Day18 把「AI 輸出格式穩不穩」這關過了,這篇要面對一個更根本的問題:就算格式對了、AI 講得有條有理,內容本身就一定可信嗎?

先回頭看:這篇到底想確認什麼?

Day18 解決的是「AI 的回覆是不是程式讀得懂的 JSON」。但格式對了,還有一個問題:菜單裡的數字,對不對得起來? 我們的菜單生成流程是這樣:

  1. 程式碼依使用者的身體資料,算出「今天六大類食物各該吃幾份」的目標(例如全穀雜糧 13 份、蔬菜 3 份)——這是程式算的,同樣的輸入每次結果都一樣。
  2. AI 從 Food DB 的候選清單裡挑食物排成菜單,回傳每一餐吃什麼,也附上它自己估的份數。
  3. 每一餐的份數加總起來,應該要剛好等於步驟 1 的目標。

所以這篇真正要確認的是:AI 給的份數,跟我們用 Food DB 的真實資料算出來的份數,是同一個數字嗎?加總之後,對得上目標嗎? 答案是:不一定。為什麼不一定?要先理解兩個觀念——幻覺,和不可重現性。

🧱 地基概念

什麼是 Hallucination?

Hallucination(幻覺)是生成式 AI 一個廣為人知的特性:模型有時會生成「聽起來很合理、講得很有自信,但實際上是錯的或編造的」內容,而且它自己不會發現這是錯的。這篇想用整個開發過程中真實發生的案例,講清楚這條界線在實務上到底防住了什麼。

先釐清一個常見誤解:Hallucination 不是單純「AI 比較笨、算錯數字」。這裡其實藏著兩件不同但相關的事,我們拆開來講:

觀念 1:幻覺——它編造了「聽起來很合理、實際上是錯的」內容

例如請 AI 估一個飯糰的營養,它可能自信地給出「熱量 150 大卡、全穀雜糧 1 份」,但這個數字是它憑印象「接龍」出來的,不是查來的(示意例子)。而且它自己不會發現自己錯了。這是「這次的答案可能是錯的」。

觀念 2:不可重現性——同一個問題問兩次,答案可能不一樣

因為 LLM 是逐字接龍、生成時帶有隨機性,同一份輸入,第一次和第二次的結果可能微妙地不同。這是「就算這次剛好對,下次也不保證一樣」。

**兩者的關係:**幻覺是「這次可能錯」,不可重現性是「就算這次對了也不能保證下次一樣」。兩個加在一起,就是「不能拿 AI 的數字當最終答案」的原因。這對聊天機器人沒關係,但對「這個人今天該吃多少蛋白質」這種數字,是不能接受的。

對比看看不可重現性:用計算機對比

計算機(程式碼) AI(LLM)
輸入 150 × 0.2 每次都是 30 這次 30,下次可能 29.5 或 32
同一題問兩次 答案一樣 答案可能微妙地不同
為什麼 照固定公式算 在「接龍」,每次逐字挑最可能的字,帶隨機性

用專案裡的情境:同一位使用者、同一份輸入,請 AI 估「蕃茄吉士蛋堡」的營養,今天它說蔬菜 0.5 份,明天可能說 0.3 份或 1 份,而且每個答案聽起來都很有自信。這比「算錯」更麻煩,因為算錯可以靠教它、改 prompt 來修,不穩定卻是 LLM 生成方式本身的特性,沒辦法完全消除。

🔧 實際操作

這個專案把 Food DB(近 2000 筆真實食物)接進菜單生成流程後,這條鐵律被真實驗證了好幾次:

  • AI 選中「蕃茄吉士蛋堡」,如果讓它自己描述營養成分,很可能因為名字裡有「蕃茄」就把整份漢堡的碳水/蛋白質都當成蔬菜類處理——事實上這是不對的,漢堡本身有蛋、有麵包,甚至些許生菜(雖然量真的很少),不可能被單純歸類在蔬菜類。
  • AI 選中「鮪魚昆布細卷」,如果讓它自己估算,很可能因為「鮪魚」是蛋白質食材,就把整份飯捲(含大量澱粉)的碳水完全忽略。
  • AI 在同一餐選了兩份生菜沙拉,份數目標因此超支——這不是「AI 算錯」,是它壓根不知道自己選擇的組合會不會超出目標,因為份數計算本來就不是它的工作。

這幾個案例的共通點:AI 給出的答案「聽起來都很合理」,錯誤不會讓人一眼看穿,只有拿真實資料回頭核對,才會發現數字不對。這正是 hallucination 最麻煩的地方——它不是明顯的胡言亂語,是「看起來對、細究才發現錯」的那種錯。

這個專案的防線,不是「叫 AI 小心一點」,是結構性地不給它算錯的機會:

AI 選完食物後,程式碼一律重新用食物代換表公式精確計算一次,覆蓋掉 AI 自己的估算;生成完菜單後,還有兩層驗證(緩衝餐機制補足份數落差、超支偵測抓超支重試)。換句話說,不是相信 AI 這次答對了,而是不管它答什麼,最後呈現給使用者的數字,永遠是程式碼算出來、可以重現、可以驗證的那個版本。

小結

這條界線劃在這裡,效果不是「讓 AI 變聰明」,是「讓系統整體的正確性不依賴 AI 那次到底表現好不好」——這才是把生成式 AI 用進一個「數字不能出錯」的產品裡,真正該有的態度。到這裡,Part 4 把「AI 該做什麼、不該做什麼、怎麼溝通、怎麼確保輸出可用、為什麼還是不能完全信任它」這條線走完了。下一部分要處理的是另一個更大的現實問題:AI 最大的挑戰其實不是 AI 本身,而是餵給它的資料夠不夠好。


上一篇
Day18 - Structured Output / JSON
系列文
營養師想做一個飲食建議產品 共 19 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言